package com.ruoyi.web.controller.system;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.system.domain.*;
import com.ruoyi.system.service.*;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;

/**
 * 采购计划商品Controller
 * 
 * @author ruoyi
 * @date 2020-12-13
 */
@Controller
@RequestMapping("/system/purchaseitem")
public class SysPurchaseitemController extends BaseController
{
    private String prefix = "system/purchaseitem";

    @Autowired
    private ISysPurchaseitemService sysPurchaseitemService;
    @Autowired
    private ISysPurchaseplanService sysPurchaseplanService;
    @Autowired
    private ISysGoodsclassificationService sysGoodsclassificationService;
    @Autowired
    private ISysGoodsService sysGoodsService;
    @Autowired
    private ISysOfferinfoService sysOfferinfoService;
    @Autowired
    private ISysPeixuanjianService sysPeixuanjianService;
    @Autowired
    private ISysBidinfoService sysBidinfoService;

    @RequiresPermissions("system:purchaseitem:view")
    @GetMapping()
    public String purchaseitem()
    {
        return prefix + "/purchaseitem";
    }

    /**
     * 查询采购计划商品列表
     */
    @RequiresPermissions("system:purchaseitem:list")
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(SysPurchaseitem sysPurchaseitem, ModelMap mmap)
    {
        SysUser sysUser = ShiroUtils.getSysUser();
        if("10".equals(sysUser.getUserType())){
            sysPurchaseitem.setPurchasingUnitId(sysUser.getCompanyId());
        }
        startPage();
        List<SysPurchaseitem> purchaseitemlist = sysPurchaseitemService.selectSysPurchaseitemList(sysPurchaseitem);
        boolean isSucc = false;
        for (int i=0;i<purchaseitemlist.size();i++) {
            long purchaseItemId = purchaseitemlist.get(i).getPurchaseItemId();
            SysBidinfo bidInfo = sysBidinfoService.findPurchaseitemId(purchaseItemId);
            /**
             * 这里需要判断当前时间一定要大于竞价表BindInfo表中的结束竞价时间！！！
             * 这里需要判断当前时间一定要大于竞价表BindInfo表中的结束竞价时间！！！
             */
            if(bidInfo!=null){
                if(bidInfo.getBidStatus().equals("1")){
                    boolean flag = false;
                    SysOfferinfo offerinfo = new SysOfferinfo();
                    offerinfo.setBidInfoId(bidInfo.getBidInfoId());
                        List<SysOfferinfo> oList = sysOfferinfoService.selectSysOfferinfoList(offerinfo);
                        if(bidInfo.getLowerestNumber()!=0){
                            if(oList.size()<1){
                                bidInfo.setBidStatus("-1");
                                bidInfo.setAttribute1("无供应商报价!");
                                sysBidinfoService.updateSysBidinfo(bidInfo);
                            }
                            if(oList.size()>0&&oList.size()<bidInfo.getLowerestNumber()){
                                bidInfo.setBidStatus("-1");
                                bidInfo.setAttribute1("报价供应商数小于限制个数!");
                                sysBidinfoService.updateSysBidinfo(bidInfo);
                            }
                            if(oList.size()>=bidInfo.getLowerestNumber()){
                                double[] qian = new double[oList.size()];
                                for(int a=0;a<oList.size();a++){
                                    qian[a]=oList.get(a).getOfferAmount();
                                }
                                double min=qian[0];
                                for(int d=1;d<qian.length;d++){
                                    if(qian[d]<min){
                                        min=qian[d];
                                    }
                                }
                                double minQian = min;
                                int flags =0;
                                for(int d=0;d<qian.length;d++){
                                    if(minQian==qian[d]){
                                        flags+=1;
                                    }
                                }
                                if(flags>=2){
                                    bidInfo.setBidStatus("-1");
                                    bidInfo.setAttribute1("有相同的最低价!");
                                    sysBidinfoService.updateSysBidinfo(bidInfo);
                                }
                                if(flags==1){
                                    bidInfo.setBidStatus("0");
                                    bidInfo.setAttribute1("竞价成功!");
                                    sysBidinfoService.updateSysBidinfo(bidInfo);
                                }
                            }
                        }else{
                            if(oList.size()<1){
                                bidInfo.setBidStatus("-1");
                                bidInfo.setAttribute1("无供应商报价!");
                                sysBidinfoService.updateSysBidinfo(bidInfo);
                            }else{
                                bidInfo.setBidStatus("0");
                                bidInfo.setAttribute1("竞价成功!");
                                sysBidinfoService.updateSysBidinfo(bidInfo);
                            }
                        }

                }
            }
            if(bidInfo != null && bidInfo.getBidStatus().equals("0")){
                isSucc = true;
            }
            purchaseitemlist.get(i).setSysBidinfo(bidInfo);

        }
        return getDataTable(purchaseitemlist);
    }

    /**
     * 导出采购计划商品列表
     */
    @RequiresPermissions("system:purchaseitem:export")
    @Log(title = "采购计划商品", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    @ResponseBody
    public AjaxResult export(SysPurchaseitem sysPurchaseitem)
    {
        List<SysPurchaseitem> list = sysPurchaseitemService.selectSysPurchaseitemList(sysPurchaseitem);
        ExcelUtil<SysPurchaseitem> util = new ExcelUtil<SysPurchaseitem>(SysPurchaseitem.class);
        return util.exportExcel(list, "purchaseitem");
    }

    /**
     * 新增采购计划商品
     */
    @GetMapping("/add/{purchasePlanId}")
    public String add(@PathVariable("purchasePlanId") Long purchasePlanId, ModelMap mmap)
    {
        SysPurchaseplan sysPurchaseplan = sysPurchaseplanService.selectSysPurchaseplanById(purchasePlanId);
        List<SysGoodsclassification> sysGoodsclassificationList = sysGoodsclassificationService.selectSysGoodsclassificationList(null);
        mmap.put("planTitle",sysPurchaseplan.getTitle());
        mmap.put("purchasePlanId",purchasePlanId);
        mmap.put("purchasingUnitId",sysPurchaseplan.getPurchasingUnitId());
        mmap.put("sysGoodsclassificationList",sysGoodsclassificationList);
        return prefix + "/add";
    }

    /**
     * 查询种类下商品
     * @param goodsClassificationId
     * @param mmap
     * @return
     */
    @PostMapping("/selectShangPi")

    public String selectShangPi(Long goodsClassificationId, ModelMap mmap)
    {
        SysGoods sysGoods = new SysGoods();
        sysGoods.setGoodsClassificationId(goodsClassificationId);
        List<SysGoods> goods = sysGoodsService.selectSysGoodsList(sysGoods);

        mmap.put("goods", goods);
        return prefix + "/goods";
    }
    /**
     * 新增保存采购计划商品
     */
    @RequiresPermissions("system:purchaseitem:add")
    @Log(title = "采购计划商品", businessType = BusinessType.INSERT)
    @PostMapping("/add")
    @ResponseBody
    public AjaxResult addSave(SysPurchaseitem sysPurchaseitem)
    {
        SysGoods sysGoods = sysGoodsService.selectSysGoodsById(sysPurchaseitem.getGoodsId());
        SysGoodsclassification sysGoodsclassification = sysGoodsclassificationService.selectSysGoodsclassificationById(sysGoods.getGoodsClassificationId());
        SysPurchaseplan sysPurchaseplan = sysPurchaseplanService.selectSysPurchaseplanById(sysPurchaseitem.getPurchasePlanId());
        sysPurchaseitem.setAttribute1(sysGoods.getGoodsName());//货物名称
        sysPurchaseitem.setAttribute2(sysPurchaseplan.getTitle());//计划名称
        sysPurchaseitem.setAttribute3(sysGoodsclassification.getGoodsClassificationName());//货物分类
        return toAjax(sysPurchaseitemService.insertSysPurchaseitem(sysPurchaseitem));
    }

    /**
     * 修改采购计划商品
     */
    @GetMapping("/edit/{purchaseItemId}")
    public String edit(@PathVariable("purchaseItemId") Long purchaseItemId, ModelMap mmap)
    {
        SysPurchaseitem sysPurchaseitem = sysPurchaseitemService.selectSysPurchaseitemById(purchaseItemId);
        mmap.put("sysPurchaseitem", sysPurchaseitem);
        return prefix + "/edit";
    }

    /**
     * 修改保存采购计划商品
     */
    @RequiresPermissions("system:purchaseitem:edit")
    @Log(title = "采购计划商品", businessType = BusinessType.UPDATE)
    @PostMapping("/edit")
    @ResponseBody
    public AjaxResult editSave(SysPurchaseitem sysPurchaseitem)
    {
        return toAjax(sysPurchaseitemService.updateSysPurchaseitem(sysPurchaseitem));
    }

    /**
     * 删除采购计划商品
     */
    @RequiresPermissions("system:purchaseitem:remove")
    @Log(title = "采购计划商品", businessType = BusinessType.DELETE)
    @PostMapping( "/remove")
    @ResponseBody
    public AjaxResult remove(String ids)
    {
        return toAjax(sysPurchaseitemService.deleteSysPurchaseitemByIds(ids));
    }

    /**
     *开启竞价
     * @param purchaseItemId
     * @param mmap
     * @return
     */
    @RequiresPermissions("system:purchaseitem:resetJingjia")
    @GetMapping("/resetJingjia/{purchaseItemId}")
    public String resetJingjia(@PathVariable("purchaseItemId") Long purchaseItemId, ModelMap mmap)
    {
        SysPurchaseitem sysPurchaseitem = sysPurchaseitemService.selectSysPurchaseitemById(purchaseItemId);
        SysGoods sysGoods= sysGoodsService.selectSysGoodsById(sysPurchaseitem.getGoodsId());
        String isTaishi="1";
        String isBijiben="2";
        if("商用台式计算机".equals(sysGoods.getGoodsName())){
            mmap.put("isTaishi", isTaishi);
        }
        if("商用便携式计算机".equals(sysGoods.getGoodsName())){
            mmap.put("isBijiben", isBijiben);
        }
        mmap.put("sysPurchaseitem",sysPurchaseitem);
        mmap.put("sysGoods",sysGoods);
        return prefix + "/jingjia";
    }
    /**
     *查看报价单
     * @param purchaseItemId
     * @param mmap
     * @return
     */
    @RequiresPermissions("system:purchaseitem:baojiadan")
    @GetMapping("/baojiadan/{purchaseItemId}")
    public String baojiadan(@PathVariable("purchaseItemId")Long purchaseItemId, ModelMap mmap)
    {
        SysPurchaseitem sysPurchaseitem = sysPurchaseitemService.selectSysPurchaseitemById(purchaseItemId);
        SysBidinfo bidInfo = sysBidinfoService.findPurchaseitemId(sysPurchaseitem.getPurchaseItemId());
        List<BaoJian> lists = sysOfferinfoService.showOfferInfoDetails(purchaseItemId);
        if(lists.size()>0){

            for (BaoJian baoJian : lists) {
                if(baoJian.getSupplierName()!=null){
                    List<SysPeixuanjian> peis = new ArrayList<SysPeixuanjian>();
//                Map<String,Object> aa = (Map<String, Object>) object;
                    if(StringUtils.isNotEmpty(baoJian.getAttribute3())){//配选件

                        String ab = baoJian.getAttribute3();
                        if(StringUtils.isNotBlank(ab)){
                            String ids[] = ab.split(",");
                            for(int j = 0;j<ids.length;j++){
                                SysPeixuanjian pei = sysPeixuanjianService.selectSysPeixuanjianById(Long.parseLong(ids[j]));
//                            peis.add(pei);
                                baoJian.getAbs().add(pei);
                            }
                        }
                    }
                }else {
                    mmap.put("bidInfo", bidInfo);
                    return prefix + "/shibai";


                }


//                aa.put("abs", peis);
//                object = aa;
            }
            mmap.put("offerDetails", lists);
            mmap.put("offerDetailsSize", lists.size());
            return prefix + "/offerInfoTable";
        }else{
            mmap.put("bidInfo", bidInfo);
            return prefix + "/shibai";
        }


    }
    /**
     *查看报价单结果
     * @param purchaseItemId
     * @param mmap
     * @return
     */
    @RequiresPermissions("system:purchaseitem:jieguo")
    @GetMapping("/jieguo/{purchaseItemId}")
    public String jieguo(@PathVariable("purchaseItemId") Long purchaseItemId, ModelMap mmap)
    {
    return "";
    }
}
